#ifndef STOPWATCH_H_
#define STOPWATCH_H_

#include <Basic.hh>
#include <sys/time.h>

//
/**
 * \file Stopwatch.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class Stopwatch Stopwatch.hh
 *
 * 시작 시점과 끝 시점의 시간차이를 알려준다.
 * 
 * start 메소드를 사용해서 시작 시점을 알리고, stop 메소드를 사용해서 끝 시점을 
 * 알린다.
 */
class Stopwatch
{
public:
	/**
	 * \name start
	 * 
	 * 시작 시점을 알린다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf start();
	
	/**
	 * \name stop
	 * 
	 * 끝 시점을 알린다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf stop();
	
	/**
	 * \name tellSec
	 * 
	 * 초 단위로 걸린 시간을 알려준다.
	 * 
	 * \return 
	 * 
	 * start 메소드를 호출한 시점에서 end 메소드를 호출한 시점 까지의 시간.
	 */
	virtual USNumber tellSec();
	
	/**
	 * \name tellTime
	 * 
	 * 마이크로 초 단위로 걸린 시간을 알려준다.
	 * 
	 * \return 
	 * 
	 * start 메소드를 호출한 시점에서 end 메소드를 호출한 시점 까지의 시간.
	 */
	virtual USNumber tellMicroSec();
	
// Convert
protected:
	/**
	 * \name convertSec2uSec
	 * 
	 * 
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	inline USNumber convertSec2uSec(USNumber Sec);
	
// Member
protected:
	/**
	 * 시작 시점.
	 */
	timeval StartTime;
	
	/**
	 * 끝 시점.
	 */
	timeval StopTime;
	
	/**
	 * ???
	 */
	bool Started;
	
	/**
	 * ???
	 */
	bool Stoped;
};

#endif //STOPWATCH_H_